package br.com.digidata.controle;

import java.util.List;
import java.util.Scanner;

import br.com.digidata.modelo.*;
import br.com.digidata.negocio.*;

public class Principal {

	public static void main(String[] args) {
		int opcao = menu();
		while (opcao != 99) {
	        switch (opcao)
	        {
	        case 1:
	        	inserirPaciente();
	        	break;
	        	
			case 2:
				alterarPaciente();
	        	break;
	        	
	        case 3:
	        	listarPacientes();
	        	break;
	        	
	        case 4:
	        	inserirMedico();
	        	break;
	        	
	        case 5:
	        	alterarMedico();
	        	break;
	        	
	        case 6:
	        	listarMedicos();
	        	break;
	        	
	        case 7:
	        	cadastrarLaudo();
	        	break;
	        	
	        case 8:
	        	listarLaudo();
	        	break;
	        	
	        case 9:
	        	marcarConsulta();
	        	break;
	        	
	        case 10:
	        	alterarConsulta();
	        	break;
	        	
	        case 11:
	        	apagarConsulta();
	        	break;
	        	
	        case 12:
	        	listarAgendamentos();
	        	break;
	        	
	        default:
	        	System.out.println("Opção inválida.");
	        	
	        }
	        opcao = menu();
		}
		System.out.println("Terminado!!!");
	}
	
	public static int menu() {
		System.out.println();
        System.out.println("Digite a opção que deseja executar:"
                + "\n1 - Cadastro de paciente || 2 - Alteracao de paciente || 3 - Lista de pacientes"
                + "\n4 - Cadastro de Medico || 5 - Alteracao de Medico || 6 - Lista de Medicos"
                + "\n7 - Cadastro de Laudo || 8 - Lista de Laudos"
                + "\n9 - Marcacao de consulta || 10 - Alteracao de marcacao de consulta || 11 - Cancelamento de consulta || 12 - Lista de consultas marcadas \n");
        
        Scanner scan = new Scanner (System.in);
        int opcao = scan.nextInt(); scan.nextLine();
        return opcao;
	}

	public static void inserirPaciente() {
        PacienteDAO dao = new PacienteDAO();

        Scanner scan = new Scanner (System.in);

        System.out.print ("CPF: ");
        String cpf = scan.nextLine();
        System.out.print ("Nome: ");
        String nome = scan.nextLine();
        System.out.print ("Data de nascimento: ");
        String dataNasc = scan.nextLine();
        System.out.print ("Sexo: ");
        String sexo = scan.nextLine();
        System.out.print ("Logradouro: ");
        String logradouro = scan.nextLine();
        System.out.print ("Numero: ");
        int numero = scan.nextInt(); scan.nextLine();
        System.out.print ("Complemento: ");
        String complemento = scan.nextLine();
        System.out.print ("Bairro: ");
        String bairro = scan.nextLine();
        System.out.print ("Cidade: ");
        String cidade = scan.nextLine();
        System.out.print ("UF: ");
        String uf = scan.nextLine();
        System.out.print ("CEP: ");
        String cep = scan.nextLine();
        System.out.print ("RG: ");
        int rg = scan.nextInt(); scan.nextLine();
        System.out.print ("Convenio: ");
        String convenio = scan.nextLine();
        System.out.print ("Telefone Residencial: ");
        String res = scan.nextLine();
        System.out.print ("Telefone Celular: ");
        String cel = scan.nextLine();
        
        Endereco e = new Endereco(logradouro, numero, complemento, bairro, cidade, uf, cep);
        Paciente p = new Paciente(cpf, nome, dataNasc, sexo, res, cel, e, rg, convenio); 
        dao.insert(p);
	}
	
	public static void alterarPaciente() {
        PacienteDAO dao = new PacienteDAO();

        Scanner scan = new Scanner (System.in);
        
        System.out.print ("Digite o id do paciente que deseja alterar: ");
        int id = scan.nextInt(); scan.nextLine();
        System.out.print ("Convenio: ");
        String convenio = scan.nextLine();
        System.out.print ("Telefone Celular: ");
        String cel = scan.nextLine();

        Paciente p = new Paciente(id, cel, convenio);
        dao.update(p);
	}
	
	public static void listarPacientes() {
        PacienteDAO dao = new PacienteDAO();

        List<Paciente>pacientes = dao.retrive();
        for(Paciente paciente : pacientes){
                System.out.printf("%d | %s | %s | %s \n", 
                		paciente.getId(), paciente.getNome(), paciente.getTelefoneCelular(),
                		paciente.getConvenio());
        }
    }
	
	public static void inserirMedico() {
        MedicoDAO dao = new MedicoDAO();

        Scanner scan = new Scanner (System.in);

        System.out.print ("CPF: ");
        String cpf = scan.nextLine();
        System.out.print ("Nome: ");
        String nome = scan.nextLine();
        System.out.print ("Data de nascimento: ");
        String dataNasc = scan.nextLine();
        System.out.print ("Sexo: ");
        String sexo = scan.nextLine();
        System.out.print ("Logradouro: ");
        String logradouro = scan.nextLine();
        System.out.print ("Numero: ");
        int numero = scan.nextInt(); scan.nextLine();
        System.out.print ("Complemento: ");
        String complemento = scan.nextLine();
        System.out.print ("Bairro: ");
        String bairro = scan.nextLine();
        System.out.print ("Cidade: ");
        String cidade = scan.nextLine();
        System.out.print ("UF: ");
        String uf = scan.nextLine();
        System.out.print ("CEP: ");
        String cep = scan.nextLine();
        System.out.print ("CRM: ");
        int crm = scan.nextInt(); scan.nextLine();
        System.out.print ("Especialidade: ");
        String especialidade = scan.nextLine();
        System.out.print ("Telefone Residencial: ");
        String res = scan.nextLine();
        System.out.print ("Telefone Celular: ");
        String cel = scan.nextLine();
        
        Endereco e = new Endereco(logradouro, numero, complemento, bairro, cidade, uf, cep);
        Medico m = new Medico(cpf, nome, dataNasc, sexo, res, cel, e, crm, especialidade);
        dao.insert(m);		
	}
	
	public static void alterarMedico() {
        MedicoDAO dao = new MedicoDAO();

        Scanner scan = new Scanner (System.in);
        
        System.out.print ("Digite o id do M�dico que deseja alterar: ");
        int id = scan.nextInt(); scan.nextLine();
        System.out.print ("Especialidade: ");
        String especialidade = scan.nextLine();
        System.out.print ("Telefone Celular: ");
        String cel = scan.nextLine();

        Medico m = new Medico(id, cel, especialidade);
        dao.update(m);
	}
	
	public static void listarMedicos() {
        MedicoDAO dao = new MedicoDAO();

        List<Medico> medicos = dao.retrive();
        for(Medico medico : medicos){
                System.out.printf("%d | %s | %s | %s \n", 
                		medico.getId(), medico.getNome(), medico.getTelefoneCelular(),
                		medico.getEspecialidade());
        }
    }
	
	public static void marcarConsulta() {
        AgendaDAO dao = new AgendaDAO();

        Scanner scan = new Scanner (System.in);

        System.out.print ("Data: ");
        String data = scan.nextLine();
        System.out.print ("Hora: ");
        String hora = scan.nextLine();
        System.out.print ("ID do Medico: ");
        int medicoId = scan.nextInt(); scan.nextLine();
        System.out.print ("ID do Paciente: ");
        int pacienteId = scan.nextInt(); scan.nextLine();

        Medico m = new Medico(medicoId);
        Paciente p = new Paciente(pacienteId);
        Agenda a = new Agenda(data, hora, "Marcada", m, p);
        	
        dao.insert(a);
	}
	
	public static void alterarConsulta() {
        AgendaDAO dao = new AgendaDAO();

        Scanner scan = new Scanner (System.in);
        
        System.out.print ("Digite o id do agendamento que deseja alterar: ");
        int agendaId = scan.nextInt(); scan.nextLine();
        System.out.print ("Data: ");
        String data = scan.nextLine();
        System.out.print ("Hora: ");
        String hora = scan.nextLine();
        System.out.print ("ID do Medico: ");
        int medicoId = scan.nextInt(); scan.nextLine();
        System.out.print ("ID do Paciente: ");
        int pacienteId = scan.nextInt(); scan.nextLine();

        Medico m = new Medico(medicoId);
        Paciente p = new Paciente(pacienteId);
        Agenda a = new Agenda(agendaId, data, hora, "Remarcada", m, p);
        
        dao.update(a);
	}
	
	public static void listarAgendamentos() {
        AgendaDAO dao = new AgendaDAO();

        List<Agenda> agendamentos = dao.retrive();
        for(Agenda agenda : agendamentos){
                System.out.printf("%d | %s | %s | %s | %s | %s \n", agenda.getId(), 
                		agenda.getData(), agenda.getHora(), agenda.getStatus(), 
                		agenda.getMedico().getNome(),
                		agenda.getPaciente().getNome());
        }
    }	
	
	public static void apagarConsulta() {
        AgendaDAO dao = new AgendaDAO();

        Scanner scan = new Scanner (System.in);
        
        System.out.print ("Digite o id do agendamento que deseja excluir: ");
        int id = scan.nextInt(); scan.nextLine();

        Agenda a = new Agenda(id);
        
        dao.delete(a);
	}
	
	public static void cadastrarLaudo() {
		LaudoDAO dao = new LaudoDAO();

        Scanner scan = new Scanner (System.in);

        System.out.print ("Data: ");
        String data = scan.nextLine();
        System.out.print ("Queixa: ");
        String queixa = scan.nextLine();
        System.out.print ("Medica��o: ");
        String medicacao = scan.nextLine();
        System.out.print ("Diagn�tico: ");
        String diagnostico = scan.nextLine();
        System.out.print ("ID do Medico: ");
        int medicoId = scan.nextInt(); scan.nextLine();
        System.out.print ("ID do Paciente: ");
        int pacienteId = scan.nextInt(); scan.nextLine();

        Medico m = new Medico(medicoId);
        Paciente p = new Paciente(pacienteId);
        Laudo l = new Laudo(data, queixa, medicacao, diagnostico, m, p);
        	
        dao.insert(l);
	}
	
	public static void listarLaudo() {
		LaudoDAO dao = new LaudoDAO();

        List<Laudo> laudos = dao.retrive();
        for(Laudo laudo : laudos){
                System.out.printf("%d | %s | %s | %s | %s | %s | %s \n",
                		laudo.getId(), laudo.getData(), laudo.getQueixa(),
                		laudo.getMedicacao(), laudo.getDiagnostico(),
                		laudo.getMedico().getNome(),
                		laudo.getPaciente().getNome());
        }
	}
}
